package zhu.common.utils;

import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import zhu.common.data.Pager;

public class PagerManagerImpl extends HibernateDaoSupport implements IPagerManager {
	/* 获取pager对象，用于传到页面
	 * 根据从页面上传过来的条件查询数据
	 * currentPage主要用于指定页面跳转用，pagerMethod用于首页、前一页、后一页、尾页这四种请求的跳转
	 * currentPage和pagerMethod不会同时不为空
	 */
	public Pager getPager(String hsql,Integer pageSize, String currentPage, String pagerMethod) {
			
			int totalRows = 0;
			List items = new ArrayList();
			Pager pager = null;
			Session session = SessionFactoryUtils.getSession(getSessionFactory(),true);
			Query query = session.createQuery(hsql);

			totalRows = (query.list()).size(); //取得总计录数
			//调用构造函数，初始化各种属性,包括currentPage=1和startRow=0
			pager = new Pager(totalRows,pageSize);
			//currentPage主要是做固定页面跳转用，从页面获取跳转页号赋给currentPage
			//如果不为空，则根据从页面获取currentPage来刷新pager对象
			if (currentPage != null) {
				pager.refresh(Integer.parseInt(currentPage));
			}
			//pagerMethod有四种值即四种请求方式：首页，前一页，后一页，尾页。
			if (pagerMethod != null) {
				if (pagerMethod.equals("first")) {
					pager.first();
				} else if (pagerMethod.equals("previous")) {
					pager.previous();
				} else if (pagerMethod.equals("next")) {
					pager.next();
				} else if (pagerMethod.equals("last")) {
					pager.last();
				} 
			}
			//从当前页记录数开始
			query.setFirstResult(pager.getStartRow());
			//取出pageSize个记录
			query.setMaxResults(pager.getPageSize());
			items = query.list();//根据startRow和pageSize查询数据库
			pager.setList(items);//将查询到数据列表赋值给pager对象的list属性

			//手动获取的session,一定要记得关闭session
			this.releaseSession(session);   
			
			return pager;
	}
}
